package com.keshan.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Map;

/**
 * @author keshan
 * @date 2022/11/7 - 14:34
 */
public class JWTUtils {


    // key 设置，上线前进行修改
    private static final String SIGN ="md_safely_guard_key_yan";
    /**
     * token 生产
     * @return
     */
    public static String getToken(Map<String,String> map){
        String token = null;
        Calendar instance = Calendar.getInstance();
//        instance.add(Calendar.SECOND,12000);  //这里设置的单位是秒
        instance.add(Calendar.DATE,7);//这里设置的就是天了
        //创建jwt builder
        JWTCreator.Builder builder = JWT.create();
        //payload 写入
        map.forEach((k,v)->{
            builder.withClaim(k,v);
        });
        //指定过期时间
        try {
            token = builder.withExpiresAt(instance.getTime())//指定令牌过期时间
                    .sign(Algorithm.HMAC256(SIGN));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //sign
        return token;
    }

    /**
     * token的验证和获取数据的方法
     * @param token
     * @return
     */
    public static DecodedJWT verifyAndInfo(String token) throws UnsupportedEncodingException {
        //验证方法
        return JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
    }


}
